Java Technologies @PostConstruct এবং @PreDestroy Annotations এর ব্যবহার গাইড ও নোট

294
  • @PostConstruct এবং @PreDestroy অ্যানোটেশনগুলি Java EE (Enterprise Edition) এবং Guice-এ ক্লাসের অবজেক্ট তৈরি এবং ধ্বংসের সময় নির্দিষ্ট মেথডগুলোকে কার্যকরী (invoke) করার জন্য ব্যবহৃত হয়। এই অ্যানোটেশনগুলি সাধারণত কোডের শুরুতে এবং শেষের সময় জীবনের (lifecycle) নির্দিষ্ট আচরণ নির্ধারণ করতে ব্যবহৃত হয়।
  • @PostConstruct: যখন কোনো অবজেক্ট তৈরি হয়, তার পরে এই অ্যানোটেশনযুক্ত মেথডটি স্বয়ংক্রিয়ভাবে কল করা হয়। এটি সাধারণত অবজেক্টের initialization এবং সেটআপ করার জন্য ব্যবহৃত হয়।
  • @PreDestroy: যখন অবজেক্টটি ধ্বংস হয়, তখন এই অ্যানোটেশনযুক্ত মেথডটি স্বয়ংক্রিয়ভাবে কল করা হয়। এটি অবজেক্টের cleanup বা বন্ধ করার জন্য ব্যবহৃত হয়।
  • Guice এর @PostConstruct এবং @PreDestroy অ্যানোটেশনগুলো JSR-250 (Java Specification Request) এর অংশ, যা Guice-এ স্বয়ংক্রিয়ভাবে নির্দিষ্ট কাজগুলিকে সম্পন্ন করতে ব্যবহৃত হয়।

  • Guice: @PostConstruct এবং @PreDestroy এর ব্যবহার

  • Step 1: Maven Dependency (Optional)

  • Guice সাধারণত @PostConstruct এবং @PreDestroy অ্যানোটেশনগুলিকে সাপোর্ট করে, তবে আপনি যদি Java EE স্পেসিফিকেশন অনুযায়ী কাজ করতে চান, তবে javax.annotation প্যাকেজটি আপনার প্রজেক্টে থাকতে হবে। আপনি এটি Maven অথবা Gradle এর মাধ্যমে অ্যাড করতে পারেন:
  • Maven Dependency:
  • <dependency>
        <groupId>javax.annotation</groupId>
        <artifactId>javax.annotation-api</artifactId>
        <version>1.3.2</version>
    </dependency>
    
  • Step 2: @PostConstruct এবং @PreDestroy ব্যবহার

  • ধরা যাক, আমাদের একটি DatabaseService ক্লাস রয়েছে, যা অবজেক্ট ইনিশিয়ালাইজ করার সময় ডাটাবেজ কনফিগারেশন লোড করবে এবং অবজেক্ট ধ্বংসের সময় কনেকশন বন্ধ করবে।
  • import javax.annotation.PostConstruct;
    import javax.annotation.PreDestroy;
    
    public class DatabaseService {
        private String databaseUrl;
    
        public DatabaseService(String databaseUrl) {
            this.databaseUrl = databaseUrl;
        }
    
        @PostConstruct
        public void init() {
            // PostConstruct: Database কনফিগারেশন লোড করা হচ্ছে
            System.out.println("Initializing Database connection to: " + databaseUrl);
            // Initialize database connection or other resources
        }
    
        @PreDestroy
        public void cleanup() {
            // PreDestroy: Cleanup বা কনফিগারেশন বন্ধ করা হচ্ছে
            System.out.println("Cleaning up and closing database connection.");
            // Cleanup resources or close database connection
        }
    
        public void query() {
            System.out.println("Executing query on: " + databaseUrl);
        }
    }
    
  • এখানে, @PostConstruct মেথড init()টি DatabaseService ক্লাসের অবজেক্ট তৈরি হওয়ার পর কল হবে এবং @PreDestroy মেথড cleanup() ক্লাসের অবজেক্ট ধ্বংস হওয়ার আগে কল হবে।
  • Step 3: Guice Module এ @PostConstruct এবং @PreDestroy অ্যানোটেশন ব্যবহার

  • Guice এ @PostConstruct এবং @PreDestroy অ্যানোটেশন সাপোর্ট করার জন্য আমরা LifecycleModule বা @Inject মেথড ব্যবহারের মাধ্যমে এটি কনফিগার করতে পারি।
  • import com.google.inject.AbstractModule;
    import com.google.inject.Provides;
    import com.google.inject.Singleton;
    
    public class AppModule extends AbstractModule {
        @Override
        protected void configure() {
            // Guice কে বলে DatabaseService ক্লাসটিকে তৈরি করতে
            bind(DatabaseService.class).toInstance(new DatabaseService("jdbc:mysql://localhost/mydb"));
        }
    
        // Guice এ @PostConstruct এবং @PreDestroy সাপোর্ট করার জন্য
        @Provides
        @Singleton
        public DatabaseService provideDatabaseService() {
            return new DatabaseService("jdbc:mysql://localhost/mydb");
        }
    }
    
  • এখানে, @Provides মেথডটি Guice কে বলে কিভাবে DatabaseService ইনস্ট্যান্স তৈরি করতে হবে এবং @Singleton দিয়ে এটি নিশ্চিত করা হয় যে ডাটাবেজ সার্ভিসের একটি মাত্র ইনস্ট্যান্স থাকবে।
  • Step 4: Main ক্লাসে Guice Injector দিয়ে ইনজেক্ট করা

  • import com.google.inject.Guice;
    import com.google.inject.Injector;
    
    public class Main {
        public static void main(String[] args) {
            Injector injector = Guice.createInjector(new AppModule());
            
            // DatabaseService ইনজেক্ট করা হচ্ছে
            DatabaseService databaseService = injector.getInstance(DatabaseService.class);
            
            // DatabaseService এর মেথড কল করা
            databaseService.query();
            
            // Guice অবজেক্টের lifecycle ধ্বংস হওয়ার সময় cleanup মেথড কল হবে
            injector.injectMembers(databaseService);
        }
    }
    
  • এখানে, Guice Injector ব্যবহার করে DatabaseService ক্লাসের ইনস্ট্যান্স তৈরি হচ্ছে এবং @PostConstruct এবং @PreDestroy এর মাধ্যমে ইনিশিয়ালাইজেশন এবং ক্লিনআপ স্বয়ংক্রিয়ভাবে পরিচালিত হচ্ছে।

  • @PostConstruct এবং @PreDestroy এর সুবিধা

  • স্বয়ংক্রিয় Initialization এবং Cleanup:
    • @PostConstruct এবং @PreDestroy অ্যানোটেশন ব্যবহার করে কোডের জীবনচক্রের শুরু এবং শেষে নির্দিষ্ট মেথডগুলো স্বয়ংক্রিয়ভাবে কল হয়, যা কোডের পরিষ্কার এবং সংগঠিত রাখা নিশ্চিত করে।
  • ডিপেনডেন্সি ম্যানেজমেন্ট:
    • এগুলি Guice বা অন্যান্য DI কনটেইনারে অবজেক্ট তৈরি এবং ধ্বংসের সময় নির্দিষ্ট কার্যকলাপ সম্পন্ন করতে সহায়তা করে, যেমন কনফিগারেশন লোড করা বা রিসোর্স ক্লিনআপ করা।
  • কোডের কার্যকারিতা বৃদ্ধি:
    • এটি আপনার কোডকে আরও কার্যকরী এবং maintainable করে, কারণ অবজেক্টের ইনিশিয়ালাইজেশন ও ক্লিনআপ গুলি স্বয়ংক্রিয়ভাবে পরিচালিত হয়।

  • Guice-এ @PostConstruct এবং @PreDestroy অ্যানোটেশন ব্যবহার করে আপনি অবজেক্টের জীবনচক্রের শুরু এবং শেষের সময় নির্দিষ্ট কার্যকলাপ স্বয়ংক্রিয়ভাবে সম্পাদন করতে পারেন। এগুলি object initialization এবং resource cleanup বা shutdown অপারেশনকে সহজ ও কার্যকরী করে তোলে। Guice-এর সাথে এই অ্যানোটেশনগুলি ব্যবহার করলে কোডের রিডেবিলিটি এবং টেস্টেবিলিটি বৃদ্ধি পায়।
Content added By
Promotion

Are you sure to start over?

Loading...